// Copyright (C) 2019 Aleksey Shvayka. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-object-value
author: Matthew Phillips <matthew@matthewphillips.info>
description: >
  NewTarget is active function and subclass of Object
info: |
  Object ( [ value ] )

  1. If NewTarget is neither undefined nor the active function, then
    a. Return ? OrdinaryCreateFromConstructor(NewTarget, "%ObjectPrototype%").
  [...]
features: [class, Reflect, Reflect.construct]
---*/

function Test() {
    class O extends Object {}

    var o1 = new O({a: 1});
    var o2 = Reflect.construct(Object, [{b: 2}], O);

    assert.sameValue(o1.a, undefined);
    assert.sameValue(o2.b, undefined);

    assert.sameValue(Object.getPrototypeOf(o1), O.prototype);
    assert.sameValue(Object.getPrototypeOf(o2), O.prototype);
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_TEST; i++) {
    Test();
}
